package com.bbva.cbm.web.servlet.spring.operatoria;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;

import cbm.commons.BaseController;
import ejb.com.bbva.cbm.dominio.Caja;
import ejb.com.bbva.cbm.dominio.MontoDenominacion;
import ejb.com.bbva.cbm.dominio.TraspasoCajaEntity;
import ejb.com.bbva.cbm.service.OperativaServiceLocal;
import ejb.com.bbva.cbm.util.Constante;
import ejb.com.bbva.cbm.util.NegocioException;
import ejb.com.bbva.cbm.util.ResultadoOperacion;
import ejb.com.bbva.cbm.util.ResultadoOperacionError;
import ejb.com.bbva.cbm.util.ResultadoOperacionExcepcion;
import ejb.com.bbva.cbm.util.ResultadoOperacionExito;


public class TraspasoController  extends BaseController {
	
	public OperativaServiceLocal operativaServiceLocal;
	
	@Autowired
	public void setOperativaServiceLocal(OperativaServiceLocal operativaServiceLocal) {
		this.operativaServiceLocal = operativaServiceLocal;
	}

	public ModelAndView abrirCaja(HttpServletRequest request, HttpServletResponse response){
		return null;
	}

	public ModelAndView open(HttpServletRequest request, HttpServletResponse response){
		HttpSession session = null;
		String paginaSig = resources.getString("traspaso_caja");
		
		try {
			String oficinaId = getOficinaId(request);
			String terminalId = getTerminalId(request);
			String tipo = "Caja";
			long tipoId = Constante.PARA_TIPO_CAJA_ID;
			if("boveda".equals(request.getParameter("tipo"))) {
				tipo = "Boveda";
				tipoId = Constante.PARA_TIPO_BOVEDA_ID;
			}
			request.setAttribute("tipo", tipo);
			request.setAttribute("datos", operativaServiceLocal.obtenerDatosTraspasoCaja(oficinaId, terminalId, tipoId));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ModelAndView(paginaSig);
	}

	public ModelAndView save(HttpServletRequest request, HttpServletResponse response) {
		String       paginaSiguiente = resources.getString("ajaxrequest");
		ResultadoOperacion resultado = null;
		try {
			long divisaId = Long.parseLong(request.getParameter("divCod"));
			long cajaId   = Long.parseLong(request.getParameter("cajCod"));
			String[] secuenciaIds = request.getParameterValues("i");
			String[] montos       = new String[secuenciaIds.length];
			for (int i = 0; i < secuenciaIds.length; i++) {
				montos[i] = request.getParameter("m"+secuenciaIds[i]).replaceAll(",", "");
			}
			Caja cajaOrigen =  new Caja();
			cajaOrigen.setCajaId(cajaId);
			cajaOrigen.setDivisaId(divisaId);
			cajaOrigen.setMontoDeteriorados(Double.parseDouble(request.getParameter("monDet").replaceAll(",", "")));
			cajaOrigen.setMontoTotal(Double.parseDouble(request.getParameter("monTot").replaceAll(",", "")));
			cajaOrigen.setPatronCalidad(Double.parseDouble(request.getParameter("patCal").replaceAll(",", "")));
			List<MontoDenominacion> montosDenominacion = new ArrayList<MontoDenominacion>();
			for (int i = 0; i < secuenciaIds.length; i++) {
				MontoDenominacion monto = new MontoDenominacion();
				monto.setSecuenciaId(Long.parseLong(secuenciaIds[i]));
				monto.setDenominacionId(Long.parseLong(secuenciaIds[i]));
				monto.setValorIngresado(Double.parseDouble(montos[i]));
				montosDenominacion.add(monto);
			}
			cajaOrigen.setMontosDenominacion(montosDenominacion);

			Caja cajaDestino =  new Caja();
			String[] codigoCompuesto = request.getParameter("remCod").split("_");
			cajaDestino.setTerminalId(codigoCompuesto[0]);
			cajaDestino.setTipoId(Long.parseLong(codigoCompuesto[1]));

			cajaDestino.setOficinaId(getOficinaId(request));
			
			TraspasoCajaEntity traspaso = new TraspasoCajaEntity();
			traspaso.setCajaOrigen(cajaOrigen);
			traspaso.setCajaDestino(cajaDestino);
			
			operativaServiceLocal.grabarDatosTraspasoCaja(traspaso, getLoginUsuario(request));
			
			resultado = new ResultadoOperacionExito("El traspado de la caja fue realizado con �xito");
		} catch (NegocioException e) {
			resultado = new ResultadoOperacionError(e.getMessage());
		} catch (Exception e) {
			resultado = new ResultadoOperacionExcepcion(e);
		}
		return new ModelAndView(paginaSiguiente, "responseText", resultado.serializar());
	}
}